package com.yuelao.yuelao_backend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuelao.yuelao_backend.dto.MessageDTO;
import com.yuelao.yuelao_backend.entity.Message;

import java.util.List;

/**
 * 私聊消息Service
 * 重构说明：适配新的Conversation + Message表结构，只处理私聊消息
 */
public interface MessageService extends IService<Message> {

    /**
     * 获取私聊记录
     * @param currentUserId 当前用户ID
     * @param targetUserId 聊天对象ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 私聊记录列表
     */
    List<MessageDTO> getChatHistory(Long currentUserId, Long targetUserId, int pageNum, int pageSize);

    /**
     * 发送私聊消息
     * @param senderId 发送者ID
     * @param receiverId 接收者ID
     * @param messageType 消息类型
     * @param content 消息内容
     * @param mediaUrl 媒体文件URL
     * @return 是否成功
     */
    boolean sendMessage(Long senderId, Long receiverId, String messageType, 
                       String content, String mediaUrl);

    /**
     * 标记消息为已读
     * @param messageId 消息ID
     * @return 是否成功
     */
    boolean markAsRead(Long messageId);

    /**
     * 撤回消息
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean revokeMessage(Long messageId, Long userId);

    /**
     * 获取未读消息数量
     * @param conversationId 会话ID
     * @param userId 用户ID（接收者）
     * @return 未读数量
     */
    long getUnreadMessageCount(Long conversationId, Long userId);

    /**
     * 将 Message 实体转换为 MessageDTO
     * @param message Message 实体
     * @return MessageDTO
     */
    MessageDTO convertToMessageDTO(Message message);
}
